//
//  HSMessListViewModel.swift
//  HomeSchoolDemo
//
//  Created by 张晓林 on 16/10/10.
//  Copyright © 2016年 张晓林. All rights reserved.
//

import UIKit


/// 判断刷新类型的枚举
///
/// - pull: 上拉
/// - drap: 下拉
enum MessageLoadType {
    case pull
    case drap
}

// 定义闭包类型
typealias callback = (_ err: Error?, _ isRefresh:Bool) -> ()

class HSMessListViewModel {

    // 模型数组
    var messages:[HSMessageModel] = []
    
    // 请求数据
    func requestMessage(loadType:MessageLoadType, finished: @escaping callback) {
        // 接口地址
        let url = "ZH-schoolname-S-getJXNotification"
        // 准备参数
        let key = userInfo["key"] as! String
        // 获得当前最小的通知ID
        let minID = messages.last?.not_id ?? 0
        // 根据刷新类型来获得通知的ID
        let id = (loadType == .drap) ? 0 : minID
        // 根据刷新类型来获得刷新类型
        let lType = (loadType == .drap) ? 1 : 2
        // 参数
        let param = ["key":key,"id":id,"load_type":lType] as [String : Any]
        // 开始网络请求
        HSNetworkTools.shared.downloadData(url: url, parameters: param) {[weak self] (data, err) in
            // 守护
            guard let data = data as? NSDictionary else {
                HSAlertView.bottomAlertView("请检查网络连接")
                // 网络加载失败，也要通知控制器做处理
                finished(err, false)
                return
            }
            // 判断返回数据的正确
            switch data["result"] as! Int {
            case 0:
                // 字典转模型
                // 获得字典数组
                let dictArray = data["data"] as! [[String: Any]]
                // 创建一个保存模型的数组
                var modelArray = [HSMessageModel]()
                // 循环
                for dict in dictArray {
                    // 创建一个模型对象
                    let message = HSMessageModel(dict: dict)
                    // 添加到数组中
                    modelArray.append(message)
                }
                // 根据刷新类型来判断数据的添加方式
                // 下拉的时候是覆盖原有数据
                // 上拉到时候是将新获得的数据添加到已有数据的后面
                if loadType == .drap {
                // 赋值
                    self?.messages = modelArray
                }else {
                    self?.messages = (self?.messages)! + modelArray
                }
                // 数据正常处理完成，刷新视图
                finished(nil, true)
            case 1:
                HSAlertView.bottomAlertView("已经没有更早的数据")
                // 网络正常，但是数据加载失败，通知控制器不需要刷新视图
                print(data)
                finished(nil, false)
            default:
                break
            }
        }
        
    }
}
